home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CUCD / Programming / OUI / rcs / cycle.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  6.1 KB  |  316 lines

  1. head    1.3;
  2. access;
  3. symbols;
  4. locks
  5.     dlorre:1.3; strict;
  6. comment    @// @;
  7.  
  8.  
  9. 1.3
  10. date    98.01.13.19.58.14;    author dlorre;    state Exp;
  11. branches;
  12. next    1.2;
  13.  
  14. 1.2
  15. date    97.07.14.04.21.07;    author dlorre;    state Exp;
  16. branches;
  17. next    1.1;
  18.  
  19. 1.1
  20. date    96.08.22.02.05.10;    author dlorre;    state Exp;
  21. branches;
  22. next    ;
  23.  
  24.  
  25. desc
  26. @Oui.lib -- Object User Interface
  27. Projet créé en 1994
  28. Auteur: Dominique Lorre
  29. @
  30.  
  31.  
  32. 1.3
  33. log
  34. @set uses TagItems
  35. @
  36. text
  37. @// $Id: cycle.cc 1.2 1997/07/14 04:21:07 dlorre Exp dlorre $
  38. #include <exec/lists.h>
  39. #include <libraries/gadtools.h>
  40. #include <string.h>
  41.  
  42. #include "gadgets/cycle.h"
  43. #include "gadgetlist.h"
  44.  
  45. #include <proto/gadtools.h>
  46. #include <proto/utility.h>
  47.  
  48. // ========================================================================
  49. // ==========================  CYCLE CLASS ================================
  50. // ========================================================================
  51.  
  52. cycle::cycle(gadgetlist *gl,
  53.              void (window::*func)(gadget *, unsigned long, unsigned short),
  54.              TagItem *tags) :
  55.              gadget(gl, func), labsize(1), cylabs(NULL)
  56. {
  57.     init(tags) ;
  58. }
  59. cycle::cycle(gadgetlist *gl,
  60.              void (window::*func)(gadget *, unsigned long, unsigned short),
  61.              ULONG tag1, ...) :
  62.              gadget(gl, func), labsize(1), cylabs(NULL)
  63. {
  64.     init((TagItem *)&tag1) ;
  65. }
  66.  
  67. void cycle::init(TagItem *tags)
  68. {
  69. const char *label ;
  70.  
  71.     cursel = (LONG)GetTagData(OCYCLE_Active, 0, tags) ;
  72.     label = (const char *)GetTagData(OCYCLE_Label, NULL, tags) ;
  73.     glist->ng->ng_Flags = GetTagData(OCYCLE_Flags, PLACETEXT_LEFT, tags) ;
  74.     initlabs(tags) ;
  75.     glist->ng->ng_GadgetText = (UBYTE *)label ;
  76.     underkey(label) ;
  77.     gad = glist->gad = CreateGadget(CYCLE_KIND, glist->gad, glist->ng,
  78.         GTCY_Labels, cylabs ? cylabs : xlabs,
  79.         GTCY_Active, cursel,
  80.         GT_Underscore,  '_',
  81.         TAG_END) ;
  82. }
  83.  
  84. void cycle::initlabs(TagItem *tags)
  85. {
  86. const char **p ;
  87. const char *cp ;
  88. int i = 0 ;
  89. TagItem *t, *tl ;
  90.  
  91.     labsize = 1 ;
  92.     xlabs = NULL ;
  93.  
  94.     if (FindTagItem(OCYCLE_TextArray, tags)) {
  95.         xlabs = p = (const char **)GetTagData(OCYCLE_TextArray, NULL, tags) ;
  96.         cp = *p++ ;
  97.         while (cp) {
  98.             labsize++ ;
  99.             cp = *p++ ;
  100.         }
  101.      }
  102.     else {
  103.         tl = tags ;
  104.         while (t = NextTagItem(&tl)) {
  105.             if (t->ti_Tag == OCYCLE_Text) {
  106.                 labsize++ ;
  107.             }
  108.         }
  109.         cylabs = new STRPTR[labsize] ;
  110.         tl = tags ;
  111.         while (t = NextTagItem(&tl)) {
  112.             if (t->ti_Tag == OCYCLE_Text) {
  113.                 cp = (const char *)GetTagData(OCYCLE_Text, NULL, t) ;
  114.                 cylabs[i] = new char[strlen(cp)+1] ;
  115.                 strcpy(cylabs[i++], cp) ;
  116.             }
  117.         }
  118.         cylabs[i] = NULL ;
  119.     }
  120. }
  121.  
  122. void cycle::freelabs()
  123. {
  124.     if (cylabs) {
  125.     int i ;
  126.         for ( i=0 ; i<labsize; i++) if (cylabs[i]) delete cylabs[i] ;
  127.         delete cylabs ;
  128.         cylabs = NULL ;
  129.     }
  130. }
  131.  
  132. cycle::~cycle()
  133. {
  134.     freelabs() ;
  135. }
  136. void cycle::action(unsigned long classe, unsigned short code)
  137. {
  138.     cursel = code ;
  139.     gadget::action(classe, code) ;
  140. }
  141.  
  142.  
  143. void cycle::keystroke(BOOL shifted)
  144. {
  145.     if (shifted) {
  146.         cursel-- ;
  147.         if (cursel < 0) cursel=labsize-2 ;
  148.     }
  149.     else {
  150.         cursel++ ;
  151.         if (cursel >= labsize-1)
  152.             cursel = 0 ;
  153.     }
  154.     GT_SetGadgetAttrs(gad, w, NULL,
  155.         GTCY_Active,    cursel,
  156.         TAG_DONE) ;
  157.     gadget::action(NULL, cursel) ;
  158. }
  159.  
  160.  
  161. void cycle::set(TagItem *tags)
  162. {
  163.     cursel = (LONG)GetTagData(OCYCLE_Active, cursel, tags) ;
  164.     if (FindTagItem(OCYCLE_Text, tags) || FindTagItem(OCYCLE_TextArray, tags)) {
  165.         freelabs() ;
  166.         initlabs(tags) ;
  167.     }
  168.     GT_SetGadgetAttrs(gad, w, NULL,
  169.         GTCY_Active,   cursel,
  170.         GTCY_Labels,   cylabs ? cylabs : xlabs,
  171.         TAG_DONE) ;
  172. }
  173.  
  174. void cycle::set(ULONG tag1, ...)
  175. {
  176.     set((TagItem *)&tag1) ;
  177. }
  178. @
  179.  
  180.  
  181. 1.2
  182. log
  183. @*** empty log message ***
  184. @
  185. text
  186. @d1 1
  187. a1 1
  188. // $Id$
  189. d10 1
  190. a15 1
  191.  
  192. d18 9
  193. a26 4
  194.              const char *text,
  195.              LONG   flags,
  196.              long active,
  197.              const char **table) : gadget(gl, func), labsize(0), cylabs(NULL)
  198. d28 2
  199. a29 2
  200. const char **p = table ;
  201. const char *cp ;
  202. d31 3
  203. a33 1
  204.     cursel = active ;
  205. d35 11
  206. a45 14
  207.     cp = *p++ ;
  208.     while (cp) {
  209.         labsize++ ;
  210.         cp = *p++ ;
  211.     }
  212.  
  213.     gl->ng->ng_GadgetText = (UBYTE *)text ;
  214.     underkey(text) ;
  215.     gl->ng->ng_Flags = flags ;
  216.     gad = gl->gad = CreateGadget(CYCLE_KIND, gl->gad, gl->ng,
  217.             GTCY_Labels, table,
  218.             GTCY_Active, active,
  219.             GT_Underscore,  '_',
  220.             TAG_END) ;
  221. d48 1
  222. a48 6
  223. cycle::cycle(gadgetlist *gl,
  224.              void (window::*func)(gadget *, unsigned long, unsigned short),
  225.              const char *text,
  226.              LONG   flags,
  227.              long   active,
  228.              const char *t, ...) : gadget(gl, func), labsize(1), cylabs(NULL)
  229. d50 1
  230. a50 1
  231. const char **p = &t ;
  232. d53 4
  233. d58 2
  234. a59 12
  235.     cursel = active ;
  236.     cp = *p++ ;
  237.     while (cp) {
  238.         labsize++ ;
  239.         cp = *p++ ;
  240.     }
  241.     cylabs = new STRPTR[labsize] ;
  242.     p = &t ;
  243.     cp = *p++ ;
  244.     while (cp) {
  245.         cylabs[i] = new char[strlen(cp)+1] ;
  246.         strcpy(cylabs[i++], cp) ;
  247. d61 22
  248. a83 10
  249.     cylabs[i] = NULL ;
  250.  
  251.     gl->ng->ng_GadgetText = (UBYTE *)text ;
  252.     underkey(text) ;
  253.     gl->ng->ng_Flags = flags ;
  254.     gad = gl->gad = CreateGadget(CYCLE_KIND, gl->gad, gl->ng,
  255.         GTCY_Labels, cylabs,
  256.         GTCY_Active, active,
  257.         GT_Underscore,  '_',
  258.         TAG_END) ;
  259. d86 1
  260. a86 1
  261. cycle::~cycle()
  262. d92 1
  263. d95 5
  264. d124 2
  265. a125 1
  266. void cycle::set(long active)
  267. d127 5
  268. a131 1
  269.     cursel = active ;
  270. d133 2
  271. a134 1
  272.         GTCY_Active,   active,
  273. d136 5
  274. @
  275.  
  276.  
  277. 1.1
  278. log
  279. @Initial revision
  280. @
  281. text
  282. @d1 1
  283. d9 1
  284. a9 1
  285. #include <cxxproto/gadtools.h>
  286. d18 1
  287. a18 1
  288.              STRPTR text,
  289. d21 1
  290. a21 1
  291.              STRPTR *table) : gadget(gl, func), labsize(0), cylabs(NULL)
  292. d23 2
  293. a24 2
  294. STRPTR *p = table ;
  295. STRPTR  cp ;
  296. d34 1
  297. a34 1
  298.     gl->ng->ng_GadgetText = text ;
  299. d46 1
  300. a46 1
  301.              STRPTR text,
  302. d49 1
  303. a49 1
  304.              STRPTR t, ...) : gadget(gl, func), labsize(1), cylabs(NULL)
  305. d51 2
  306. a52 2
  307. STRPTR *p = &t ;
  308. STRPTR  cp ;
  309. d71 1
  310. a71 1
  311.     gl->ng->ng_GadgetText = text ;
  312. d83 5
  313. a87 1
  314.     delete [] cylabs ;
  315. @
  316.